The map below shows the location of 6,690 GP surgeries in England. The full list (March 2020) contains 6,801 surgeries but 111 of these have data missing and are not included in the map.
Each surgery is colour-coded according to the number of people aged 65+ on its register (purple means the surgery is in the top or “oldest” quintile (20%) of surgeries by age; yellow means it is one of the 20% “youngest” (least people aged 65+)).
The circle representing each surgery is also sized according to the total number of patients registered there (larger means more patients).
The map is made up of two layers, which may be switched on and off using the layers feature on the left of the map.
We believe these surgeries with less than 30% registered (as of February 2020) should be a priority for targeted digital skills support, as they are more likely to have patients who lack digital skills. Within this group, those with higher numbers of older patients may be further prioritised.
This is only one way in which digital exclusion can be estimated, however, and we acknowledge that of course many patients who are not registered for GP online services may still have the digital skills and access to devices and the internet that they would need to register.
full_data_sf <- readRDS("full_data_sf.Rds")
ccg_bounds <- readRDS("ccg_bounds.Rds")
viridis_palette <- colorQuantile(palette = "viridis", domain = full_data_sf$older_popn_wtd, n = 5, reverse = TRUE)
full_data_under70 <- dplyr::filter(full_data_sf, offline_pat_pct < 70)
full_data_over70 <- dplyr::filter(full_data_sf, offline_pat_pct >= 70)
gp_map <- leaflet(full_data_sf) %>%
addProviderTiles(providers$CartoDB.Positron, options = tileOptions(minZoom = 7, maxZoom = 14)) %>%
addPolygons(
data = ccg_bounds,
stroke = TRUE,
weight = 1,
opacity = 0.75,
color = "#6C7B8B",
fill = TRUE,
fillOpacity = 0,
group = "CCG boundaries",
label = ~ccg20nm
) %>%
addCircles(
data = full_data_under70,
radius = ~`^`(total_patients, 0.625),
stroke = TRUE,
color = "#00c5cd",
weight = 2,
opacity = 0.75,
fill = TRUE,
fillColor = ~viridis_palette(older_popn_wtd),
fillOpacity = 0.75,
label = ~practice_name,
group = "> 30% 'online'",
popup = paste0(
"<table><tr><th><h3>", full_data_under70$practice_name, "</h3></th><th style = 'font-weight: 400;'>", full_data_under70$postcode, "</th></tr>",
"<tr><td>Total number of patients:</td><td style='text-align: right'><strong>", full_data_under70$total_patients, "</strong></td></tr>",
"<tr><td>Number of patients aged 65+:</td><td style='text-align: right'><strong>", full_data_under70$older_popn_unwtd, "</strong></td></tr>",
"<tr><td>% patients <em>not</em> reg'd for an online service:</td><td style='text-align: right'><strong>", full_data_under70$offline_pat_pct, "%</strong></td></tr>",
"<tr><td>Online transactions in Feb 2020:</td><td style='text-align: right'><strong>", full_data_under70$total_use, "</strong></td></tr></table>")) %>%
addCircles(
data = full_data_over70,
radius = ~`^`(total_patients, 0.625),
stroke = TRUE,
color = "#ee1289",
weight = 2,
opacity = 0.75,
fill = TRUE,
fillColor = ~viridis_palette(older_popn_wtd),
fillOpacity = 0.75,
label = ~practice_name,
group = "< 30% 'online'",
popup = paste0(
"<table><tr><th><h3>", full_data_over70$practice_name, "</h3></th><th style = 'font-weight: 400;'>", full_data_over70$postcode, "</th></tr>",
"<tr><td>Total number of patients:</td><td style='text-align: right'><strong>", full_data_over70$total_patients, "</strong></td></tr>",
"<tr><td>Number of patients aged 65+:</td><td style='text-align: right'><strong>", full_data_over70$older_popn_unwtd, "</strong></td></tr>",
"<tr><td>% patients <em>not</em> reg'd for an online service:</td><td style='text-align: right'><strong>", full_data_over70$offline_pat_pct, "%</strong></td></tr>",
"<tr><td>Online transactions in Feb 2020:</td><td style='text-align: right'><strong>", full_data_over70$total_use, "</strong></td></tr></table>")) %>%
hideGroup("> 30% 'online'") %>%
addLayersControl(overlayGroups = c(
"> 30% 'online'",
"< 30% 'online'",
"CCG Boundaries"),
position = "topleft",
options = leaflet::layersControlOptions(collapsed = FALSE)
) %>%
addLegend(
position = "topright",
colors = viridisLite::viridis(5, direction = -1, alpha = NULL),
opacity = 0.75,
title = "Number of patients aged 65+<br>(quintiles; 5 = most)",
labels = as.character(1:5)) %>%
leaflet.extras::addFullscreenControl(position = "topleft", pseudoFullscreen = FALSE) %>%
addMiniMap(tiles = providers$CartoDB.Positron,
zoomLevelOffset = -4,
toggleDisplay = TRUE)
gp_map